//
//  StatusCell.swift
//  MicroBlog
//
//  Created by 002 on 15/10/19.
//  Copyright © 2015年 002. All rights reserved.
//

import UIKit
import FFLabel

/// 微博 Cell 中控件的间距数值
let StatusCellMargin: CGFloat = 12
/// 微博头像的宽度
let StatusCellIconWidth: CGFloat = 35

/// 微博 Cell 代理
protocol StatusCellDelegate: NSObjectProtocol {
    /// 微博 cell 点击 URL
    func statusCellDidClickUrl(url: NSURL)
}

class StatusCell: UITableViewCell {

    /// cell 的代理
    weak var cellDelegate: StatusCellDelegate?    
    
    // 微博视图模型
    var viewModel : StatusViewModel? {
        // 设置工作
        didSet{
            topView.viewModle = viewModel
            // 原创微博文本
            let text = viewModel?.status.text ?? ""
            contentLabel.attributedText = EmoticonManager.sharedManager.emoticonText(text, font: contentLabel.font)
            // 设置配图视图的模型后，配图视图就有能力计算大小
            pictureView.viewModel = viewModel
            
            // 测试修改配图视图的高度-实际开发中需要注意，如果动态修改约束的高度，可能会导致行高计算错误
            pictureView.snp_updateConstraints { (make) -> Void in
                make.width.equalTo(pictureView.bounds.width)
                make.height.equalTo(pictureView.bounds.height)
            }
        }
    }

    /// MARK:根据指定视图模型动态计算行高
    ///
    /// :param: viewModel 视图模型
    ///
    /// :returns: 返回视图模型对于的行高
    func rowHeight(vm : StatusViewModel) -> CGFloat {
        
        // 1->记录视图模型
        viewModel = vm
        
        // 2->强制更新所有约束->所有控件的frame都会正确计算
        contentView.layoutIfNeeded()
        
        // 3->返回底部视图最大高度
        return CGRectGetMaxY(bottomView.frame)   
    }
    
    // MARK: 构造函数
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        setupUI()
        
        selectionStyle = .None
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // MARK:懒加载控件
    // 头部视图
    private lazy var topView : StatusCellTopView = StatusCellTopView()
    // 微博正文标签
    lazy var contentLabel: FFLabel = FFLabel(title: "微博正文",
        fontSize: 15,
        color: UIColor.darkGrayColor(),
        screenInsert: StatusCellMargin)
    // 配图视图
    lazy var pictureView : StatusPictureView = StatusPictureView()
    // 底部视图
    lazy var bottomView : StatusCellBottomView = StatusCellBottomView()
    
}


extension StatusCell {
    
    // MARK:设置UI界面
    func setupUI(){
    
        // 1->添加控件
        contentView.addSubview(topView)
        contentView.addSubview(contentLabel)
        contentView.addSubview(pictureView)
        contentView.addSubview(bottomView)
        
        // 2->布局
        // 头部视图
        topView.snp_makeConstraints { (make) -> Void in
            // 修改头部视图高
            make.height.equalTo(2 * StatusCellMargin + StatusCellIconWidth)
            make.top.equalTo(contentView.snp_top)
            make.left.equalTo(contentView.snp_left)
            make.right.equalTo(contentView.snp_right)
        }
        // 正文内容
        contentLabel.snp_makeConstraints { (make) -> Void in
            make.top.equalTo(topView.snp_bottom).offset(StatusCellMargin)
            make.left.equalTo(contentView.snp_left).offset(StatusCellMargin)
        }
//        // 配图视图
//        pictureView.snp_makeConstraints { (make) -> Void in
//            make.top.equalTo(contentLabel.snp_bottom).offset(StatusCellMargin)
//            make.left.equalTo(contentLabel.snp_left)
//            make.width.equalTo(pictureView.bounds.width)
//            make.height.equalTo(pictureView.bounds.height)
//        }
        // 底部视图
        bottomView.snp_makeConstraints { (make) -> Void in
            make.top.equalTo(pictureView.snp_bottom).offset(StatusCellMargin)
            make.left.equalTo(contentView.snp_left)
            make.right.equalTo(contentView.snp_right)
            make.height.equalTo(44)
        }
        
        // 3. 设置代理
        contentLabel.labelDelegate = self
    }
}

// MARK: - FFLabelDelegate
extension StatusCell: FFLabelDelegate {
    
    func labelDidSelectedLinkText(label: FFLabel, text: String) {
        QL2Info(text)
        
        // 判断 text 是否是 url
        if text.hasPrefix("http://") {
            
            guard let url = NSURL(string: text) else {
                return
            }
            
            cellDelegate?.statusCellDidClickUrl(url)
        }
        
    }
}
